package com.ruoyi.collect.service;

import com.ruoyi.collect.domain.CollectBind;
import java.util.List;
import java.util.Map;

/**
 * 采集类型绑定服务接口
 *
 * @author ruoyi
 * @date 2025-11-07
 */
public interface ICollectBindService {
    /**
     * 查询采集绑定
     *
     * @param bindId 绑定ID
     * @return 采集绑定
     */
    public CollectBind selectCollectBindById(Long bindId);

    /**
     * 查询采集绑定列表
     *
     * @param collectBind 采集绑定
     * @return 采集绑定列表
     */
    public List<CollectBind> selectCollectBindList(CollectBind collectBind);

    /**
     * 新增采集绑定
     *
     * @param collectBind 采集绑定
     * @return 结果
     */
    public int insertCollectBind(CollectBind collectBind);

    /**
     * 修改采集绑定
     *
     * @param collectBind 采集绑定
     * @return 结果
     */
    public int updateCollectBind(CollectBind collectBind);

    /**
     * 批量删除采集绑定
     *
     * @param bindIds 需要删除的绑定ID
     * @return 结果
     */
    public int deleteCollectBindByIds(Long[] bindIds);

    /**
     * 删除采集绑定
     *
     * @param bindId 绑定ID
     * @return 结果
     */
    public int deleteCollectBindById(Long bindId);

    /**
     * 根据站点ID获取绑定
     *
     * @param siteId 站点ID
     * @return 绑定列表
     */
    public List<CollectBind> selectBindsBySiteId(Long siteId);

    /**
     * 获取绑定映射表便于快速查找
     *
     * @param siteId 站点ID
     * @return 以远程类型ID为键的映射表
     */
    public Map<String, CollectBind> getBindingMap(Long siteId);

    /**
     * 从远程站点自动绑定类型
     *
     * @param siteId 站点ID
     * @return 创建的绑定数量
     */
    public int autoBindTypes(Long siteId);

    /**
     * 清除站点的所有绑定
     *
     * @param siteId 站点ID
     * @return 删除的绑定数量
     */
    public int clearSiteBindings(Long siteId);

    /**
     * 同步采集站点的分类列表
     *
     * @param siteId 站点ID
     * @return 同步结果（成功数量、失败数量等）
     */
    public Map<String, Object> syncTypeList(Long siteId);

    /**
     * 获取站点已绑定的源分类ID集合（用于采集过滤）
     *
     * @param siteId 站点ID
     * @return 已绑定的源分类ID集合
     */
    public java.util.Set<String> getBoundSourceTypeIds(Long siteId);

    /**
     * 批量绑定分类
     *
     * @param bindList 绑定列表
     * @return 绑定结果
     */
    public int batchBindTypes(List<CollectBind> bindList);
}